/*
 * taskICU.c
 *  该模块用于输出捕获检测输入方波的频率和占空比
 *  Created on: 2025.5.30
 *      Author: TracyHenry
 */
#include "taskICU.h"
#include <stdio.h>
#include "tim.h"
#include "motorcontrol.h"
extern TimeTableNode *found;
ERR_STATUS now_err_status = {.err_idle_rotor = 0, .err_locked_rotor = 0, .err_water_mark = 0};
/******************************************************************************
 * FunctionName : taskICUInit
 * Description  : 任务初始化，用来开启ICU使能
 * Parameters   : void
 * Returns      : void
*******************************************************************************/
void taskICUInit(void)
{
    HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_2);
}
/******************************************************************************
 * FunctionName : taskTimerMotorControl
 * Description  : 开启定时控制电机
 * Parameters   : uint8_t const * argument 参数为电机开启的时间
 * Returns      : void
*******************************************************************************/
void inputCaptureTask(void const * argument)
{
    while (1)
    {
        if (Is_Captured == 2)  // 确保完成一次完整测量
        {
           //printf("Frequency: %.2f Hz, Duty Cycle: %.2f%%\n", Frequency, DutyCycle);
            // 重置标志
            Is_Captured = 0;
            // 适当延时
        }

        GPIO_PinState pinState = HAL_GPIO_ReadPin(WaterMark_GPIO_Port, WaterMark_Pin);
        // 根据读取的电平状态执行不同的操作
        if (pinState == GPIO_PIN_SET) {
             now_err_status.err_water_mark = 0;
        } else {
             now_err_status.err_water_mark = 1;
        }
     //printf("err_water_mark:%d\r\n", now_err_status.err_water_mark);
     HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
     motorControlByWarn();
     osDelay(500);

    }
}

void motorControlByWarn(void)
{ 
    static uint8_t flag = 0;

    if(flag != now_err_status.err_water_mark)
    {
        flag = now_err_status.err_water_mark;
    	if(now_err_status.err_water_mark == 1)
			{
		        motorControlStart(NULL);
			}
			else
			{
                motorControlStart(found);
			}
    }


}
